package dziennik.classes;
import dziennik.classes.*;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import javax.faces.application.Application;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.model.SelectItem;

/**
 * 
 * <p>
 * Klasa Rodzic reprezentuje rodzica ucznia, pozwala na automatyczne
 * pobranie danych ucznia, deserializacj? ich oraz inicjalizacje 
 * obiektu ucznia pobranymi danymi
 * </p>
 * 
 * @author Dominik Kaminski
 *
 */
	public class Rodzic extends Uzytkownik{
	
	/**
	 * 
	 * <p>Konstruktor tworzacy obiekt klasy bez pobierania danych ucznia</p>
	 *
	 * @params String imie, String nazwisko, String login, String haslo
	 * 
	 */
                public Rodzic(){
                    
                }
		public Rodzic
		(
				String imie,
				String nazwisko,
				String login,
				String haslo
		)
		{
			super(
					imie,
					nazwisko,
					login,
					haslo	
					);
		}
	

/**
 * 
 * <p>
 * Konstruktor tworzacy obiekt klasy z jednoczesnym pobraniem danych
 * ucznia z bazy danych, deserializacj? ich oraz przypisaniem tych danych
 * polu bed?cym obiektem klasy Uczen_klasy
 * </p>
 *
 * @params Polaczenie p, Connection con, int id_ucznia
 * 
 */
//	public Rodzic(Polaczenie p, Connection con, int id_ucznia){
//		uk = new Uczen_klasy(id_ucznia);
//			try{
//			Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
//			ResultSet rs = st.executeQuery("select id, dziennik from uczen where id="+id_ucznia); // DKA 04.01.2012 - pobranie nazwy dziennika, do kt?ego zapisane jest dziecko danego rodzica
//			
//			if(rs.next()){
//				String dziennik = rs.getString("dziennik");
//				ResultSet rs_dzienniki = Polaczenie.MySQL_zapytanie("select id from dzienniki where nazwa_dziennika='"+dziennik+"'");
//				rs_dzienniki.first();
//				rs = st.executeQuery("select id_ucznia, przedmioty, uwagi from uczen_dziennik where id_dziennika="+rs_dzienniki.getInt("id")+" and id_ucznia="+id_ucznia); // DKA 04.01.2012 - pobranie danych o przedmiotach i uwagach
//				rs.next();
//				
//				ArrayList<Przedmiot> prz = p.deserializuj(rs.getBytes("przedmioty"));
//				ArrayList<Uwaga> uw = p.deserializuj(rs.getBytes("uwagi"));
//				
//				if (prz == null || uw == null) {
//					System.out.println("Pusta lista przedmiotow lub uwag\n");
//				}
//				uk.setPrzedmioty(prz);
//				uk.setUwagi(uw);
//				System.out.println("Pobrano dane ucznia\n");
//			}
//			else {
//				MainWindow.wyswietl_blad("B??d", "Brak danych o uczniu");
//			}
//		} catch (SQLException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//	}
	
	public Uczen_klasy uk = null;
        public ArrayList<SelectItem> lista_uczniow = new ArrayList<SelectItem>();
	public int id_wybranego_ucznia;
	public ArrayList<String> lista_przedmiotow = new ArrayList<String>();
        public int id_wybranego_przedmiotu;
        public ArrayList<ArrayList<Double>> lista_ocen_na_przedmiot = new ArrayList<ArrayList<Double>>();
        public ArrayList<ArrayList<Integer>> lista_wag = new ArrayList<ArrayList<Integer>>();
        public ArrayList<ArrayList<String>> lista_nazw = new ArrayList<ArrayList<String>>();
        public int id_oceny;
        public ArrayList<String> uwagi_data = new ArrayList<String>();
        public ArrayList<String> uwagi_tresc = new ArrayList<String>();        
        public ArrayList<String> obecnosc_data = new ArrayList<String>();
        public ArrayList<String> obecnosc_rodzaj = new ArrayList<String>();
        //DM
        public ArrayList<String> obecnosc_przedmiot = new ArrayList<String>();
        
        public ArrayList<Przedmiot> uspr_lista_przedmiotow = new ArrayList<Przedmiot>();
        
        
        
	/**
	 * 
	 * <p>Metoda oznacza obecnosc podana w parametrze jako usprawiedliwiona</p>
	 *
	 * @params Obecnosc obecnosc
	 * 
	 * @return Obecnosc
	 * 
	 */
	public Obecnosc usprawiedliw(Obecnosc obecnosc){
		obecnosc.setRodzaj('+');
		return obecnosc;
	}

    public Uczen_klasy getUk() {
        return uk;
    }

    public void setUk(Uczen_klasy uk) {
        this.uk = uk;
    }
        
        public String pobierzDaneUcznia(){
                Uzytkownik user;
                Polaczenie polaczenie;
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
                FacesContext facesContext = FacesContext.getCurrentInstance();
                Application application = facesContext.getApplication();
                ValueBinding binding = application.createValueBinding("#{uzytkownik}");
                user = (Uzytkownik)binding.getValue(facesContext);
                binding = application.createValueBinding("#{polaczenie}");
                polaczenie = (Polaczenie)binding.getValue(facesContext);
                int id=user.getId();
                
                uk = new Uczen_klasy(id);
			try{
			Statement st = polaczenie.pobierz_uchwyt_polaczenia().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
			ResultSet rs = st.executeQuery("select id, dziennik from uczen where id="+id); // DKA 04.01.2012 - pobranie nazwy dziennika, do któego zapisane jest dziecko danego rodzica
			
                        uk.getPrzedmioty().clear();
                        uk.getUwagi().clear();
                        
			if(rs.next()){
				String dziennik = rs.getString("dziennik");
				ResultSet rs_dzienniki = Polaczenie.MySQL_zapytanie("select id from dzienniki where nazwa_dziennika='"+dziennik+"'");
				rs_dzienniki.first();
				rs = st.executeQuery("select id_ucznia, przedmioty, uwagi from uczen_dziennik where id_dziennika="+rs_dzienniki.getInt("id")+" and id_ucznia="+id); // DKA 04.01.2012 - pobranie danych o przedmiotach i uwagach
				rs.next();
				
				ArrayList<Przedmiot> prz = polaczenie.deserializuj(rs.getBytes("przedmioty"));
				ArrayList<Uwaga> uw = polaczenie.deserializuj(rs.getBytes("uwagi"));
				
				if (prz == null || uw == null) {
					System.out.println("Pusta lista przedmiotow lub uwag\n");
				}
				uk.setPrzedmioty(prz);
				uk.setUwagi(uw);
				System.out.println("Pobrano dane ucznia\n");
                                
			}	
                        
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}           
                return null;
        }
        
        public String pobierz_uczniow() {
        lista_uczniow.clear();
        ResultSet rs = Polaczenie.MySQL_zapytanie("select id, imie, nazwisko from uczen");
		try
		{
			rs.last();
			int rowCount = rs.getRow();
			rs.first();
			int i=0;
			do {
				int id = rs.getInt("id");
				String text = ""+id+". "+rs.getString("imie")+" "+rs.getString("nazwisko");
                                // DKA dodanie ucznia do listy uczniow
				lista_uczniow.add(new SelectItem(id,text));
//                                System.out.println(lista_uczniów.size());
//                                lista_uczniow.get(lista_uczniow.size()-1).setItemLabel(text);
//                                lista_uczniow.get(lista_uczniow.size()-1).setValue(id);
				rs.next();
            }while (!rs.isAfterLast());
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
    return null;
}
        public String pobierz_przedmioty() {
        lista_przedmiotow.clear();
        for (Iterator it = uk.getPrzedmioty().iterator(); it.hasNext();)
        {
                Przedmiot przedmiot = (Przedmiot)it.next();
                lista_przedmiotow.add(przedmiot.getNazwa());
        }			
				
    return null;
}
        public String pobierz_Oceny() {
        lista_ocen_na_przedmiot.clear();
        lista_wag.clear();
        lista_nazw.clear();
        ArrayList<Double> lista_ocen;
        ArrayList<Integer> lista_wag_temp;
        ArrayList<String> lista_nazw_temp = new ArrayList<String>();
        for (Iterator it = uk.getPrzedmioty().iterator(); it.hasNext();)
        {                
                Przedmiot przedmiot = (Przedmiot)it.next(); 
                lista_ocen = new ArrayList<Double>();
                lista_wag_temp = new ArrayList<Integer>();
                lista_nazw_temp = new ArrayList<String>();
                for (Iterator iter = przedmiot.getOceny().iterator(); iter.hasNext();)
                {
                        Ocena ocena = (Ocena)iter.next();
                        lista_ocen.add(ocena.getWartosc());
                        lista_wag_temp.add(ocena.getWaga());
                        lista_nazw_temp.add(ocena.getNazwa());
                }   
                lista_ocen_na_przedmiot.add(lista_ocen);
                lista_wag.add(lista_wag_temp);
                lista_nazw.add(lista_nazw_temp);
        }    		
    return null;
}
        
        
        public String pobierz_Uwagi() {
        uwagi_data.clear();
        uwagi_tresc.clear();
        for (Iterator it = uk.getUwagi().iterator(); it.hasNext();)
        {
                Uwaga uwaga = (Uwaga)it.next();
                if(uwaga.getTresc()!=null && !uwaga.getTresc().equals(""))
                {
                    uwagi_data.add(uwaga.getData());
                    uwagi_tresc.add(uwaga.getTresc());
                }
        }					
    return null;
}
        
        public String pobierz_Obecnosci() {
        obecnosc_przedmiot.clear();
        obecnosc_data.clear();
        obecnosc_rodzaj.clear();
        uspr_lista_przedmiotow.clear();
        Przedmiot temp_przedmiot;
        ArrayList<Obecnosc> obecnosc_temp;
        for (Iterator it = uk.getPrzedmioty().iterator(); it.hasNext();){
                Przedmiot przedmiot = (Przedmiot)it.next();
                temp_przedmiot = przedmiot;
                obecnosc_temp = new ArrayList<Obecnosc>();
                for (Iterator iter = przedmiot.getObecnosci().iterator(); iter.hasNext();){
                        Obecnosc obecnosc = (Obecnosc)iter.next();                        
                        obecnosc_przedmiot.add(przedmiot.getNazwa());                        
                        obecnosc_data.add(obecnosc.getData());
                        obecnosc_rodzaj.add(Character.toString(obecnosc.getRodzaj()));
                        obecnosc_temp.add(obecnosc);
                }    
                temp_przedmiot.setObecnosci(obecnosc_temp);
                uspr_lista_przedmiotow.add(temp_przedmiot);
        }      				
    return null;
}
        
        
public String usprawiedliw_nieobecnosc(Przedmiot przed,Obecnosc obec ){
    
        Uzytkownik user;
                Polaczenie polaczenie;
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
                FacesContext facesContext = FacesContext.getCurrentInstance();
                Application application = facesContext.getApplication();
                ValueBinding binding = application.createValueBinding("#{uzytkownik}");
                user = (Uzytkownik)binding.getValue(facesContext);
                binding = application.createValueBinding("#{polaczenie}");
                polaczenie = (Polaczenie)binding.getValue(facesContext);
                int id=user.getId();
                
			try{
			Statement st = polaczenie.pobierz_uchwyt_polaczenia().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
			ResultSet rs = st.executeQuery("select id, dziennik from uczen where id="+id); // DKA 04.01.2012 - pobranie nazwy dziennika, do któego zapisane jest dziecko danego rodzica
			
			if(rs.next()){
				String dziennik = rs.getString("dziennik");
				ResultSet rs_dzienniki = Polaczenie.MySQL_zapytanie("select id from dzienniki where nazwa_dziennika='"+dziennik+"'");
				rs_dzienniki.first();
				rs = st.executeQuery("select id, id_dziennika, id_ucznia, przedmioty, uwagi from uczen_dziennik where id_dziennika="+rs_dzienniki.getInt("id")+" and id_ucznia="+id); // DKA 04.01.2012 - pobranie danych o przedmiotach i uwagach
				rs.next();  
    
    
                            Przedmiot przedmiot=null;
                            Obecnosc obecnosc=null;
                            int p_index=0;
                            for (Iterator it = uk.getPrzedmioty().iterator(); it.hasNext();){
                                    przedmiot = (Przedmiot)it.next();                                    
                                    if (przedmiot.getNazwa().equals(przed.getNazwa()))break;
                                    p_index++;
                            }
                            
                            int o_index=0;
                            for (Iterator iter = przedmiot.getObecnosci().iterator(); iter.hasNext();){
                                    obecnosc= (Obecnosc)iter.next();
                                    
                                    if (obecnosc.getData().equals(obec.getData()))break;
                                    o_index++;
                            }
                            System.out.println(""+p_index+" "+o_index);
                            
                            //if(!uk.getPrzedmioty().get(p_index).getObecnosci().isEmpty())
                            uk.getPrzedmioty().get(p_index).getObecnosci().get(o_index).setRodzaj('+');
                            
                            rs.updateObject("przedmioty", Polaczenie.serializuj(uk.getPrzedmioty()));
                            rs.updateRow();  
                 }
                            } catch (SQLException e) {
                                        // TODO Auto-generated catch block
                                e.printStackTrace();
                            }  
                             

    return null;
}
        
        public ArrayList<SelectItem> getLista_uczniow() {
        return lista_uczniow;
    }
        public int getId_wybranego_ucznia() {
        return id_wybranego_ucznia;
    }
     
        public int getId_wybranego_przedmiotu() {
        return id_wybranego_przedmiotu;
    }
        public ArrayList<String> getLista_przedmiotow() {
        return lista_przedmiotow;
    }
        public int getId_oceny() {
        return id_oceny;
    }
        public ArrayList<ArrayList<Double>> getLista_ocen() {
        return lista_ocen_na_przedmiot;
    }
        public ArrayList<String> getUwagiData() {
        return uwagi_data;
    }
        public ArrayList<String> getUwagiTresc() {
        return uwagi_tresc;
    }
        public ArrayList<String> getObecnoscData() {
        return obecnosc_data;
    }
        public ArrayList<String> getObecnoscRodzaj() {
        return obecnosc_rodzaj;
    }

    public ArrayList<String> getObecnoscPrzedmiot() {
        return obecnosc_przedmiot;
    }
public ArrayList<ArrayList<Integer>> getLista_wag() {
        return lista_wag;
    }
        public ArrayList<ArrayList<String>> getLista_nazw() {
        return lista_nazw;
    }
        public ArrayList<Przedmiot> getObecnoscListaPrzedmiotow() {
        return uspr_lista_przedmiotow;
    }
}